#pragma once

// macro redefine
#define CUBLASWINAPI MCBLASWINAPI
#define CUBLASAPI MCBLASAPI

// enum redefine
#define cublasLtClusterShape_t mcblasLtClusterShape_t
#define CUBLASLT_CLUSTER_SHAPE_AUTO    MCBLASLT_CLUSTER_SHAPE_AUTO
#define CUBLASLT_CLUSTER_SHAPE_1x1x1   MCBLASLT_CLUSTER_SHAPE_1x1x1
#define CUBLASLT_CLUSTER_SHAPE_1x2x1   MCBLASLT_CLUSTER_SHAPE_1x2x1
#define CUBLASLT_CLUSTER_SHAPE_1x4x1   MCBLASLT_CLUSTER_SHAPE_1x4x1
#define CUBLASLT_CLUSTER_SHAPE_2x1x1   MCBLASLT_CLUSTER_SHAPE_2x1x1
#define CUBLASLT_CLUSTER_SHAPE_2x2x1   MCBLASLT_CLUSTER_SHAPE_2x2x1
#define CUBLASLT_CLUSTER_SHAPE_2x4x1   MCBLASLT_CLUSTER_SHAPE_2x4x1
#define CUBLASLT_CLUSTER_SHAPE_4x1x1   MCBLASLT_CLUSTER_SHAPE_4x1x1
#define CUBLASLT_CLUSTER_SHAPE_4x2x1   MCBLASLT_CLUSTER_SHAPE_4x2x1
#define CUBLASLT_CLUSTER_SHAPE_4x4x1   MCBLASLT_CLUSTER_SHAPE_4x4x1
#define CUBLASLT_CLUSTER_SHAPE_1x8x1   MCBLASLT_CLUSTER_SHAPE_1x8x1
#define CUBLASLT_CLUSTER_SHAPE_8x1x1   MCBLASLT_CLUSTER_SHAPE_8x1x1
#define CUBLASLT_CLUSTER_SHAPE_2x8x1   MCBLASLT_CLUSTER_SHAPE_2x8x1
#define CUBLASLT_CLUSTER_SHAPE_8x2x1   MCBLASLT_CLUSTER_SHAPE_8x2x1
#define CUBLASLT_CLUSTER_SHAPE_1x16x1  MCBLASLT_CLUSTER_SHAPE_1x16x1
#define CUBLASLT_CLUSTER_SHAPE_16x1x1  MCBLASLT_CLUSTER_SHAPE_16x1x1
#define CUBLASLT_CLUSTER_SHAPE_1x3x1   MCBLASLT_CLUSTER_SHAPE_1x3x1
#define CUBLASLT_CLUSTER_SHAPE_1x5x1   MCBLASLT_CLUSTER_SHAPE_1x5x1
#define CUBLASLT_CLUSTER_SHAPE_1x6x1   MCBLASLT_CLUSTER_SHAPE_1x6x1
#define CUBLASLT_CLUSTER_SHAPE_1x7x1   MCBLASLT_CLUSTER_SHAPE_1x7x1
#define CUBLASLT_CLUSTER_SHAPE_1x9x1   MCBLASLT_CLUSTER_SHAPE_1x9x1
#define CUBLASLT_CLUSTER_SHAPE_1x10x1  MCBLASLT_CLUSTER_SHAPE_1x10x1
#define CUBLASLT_CLUSTER_SHAPE_1x11x1  MCBLASLT_CLUSTER_SHAPE_1x11x1
#define CUBLASLT_CLUSTER_SHAPE_1x12x1  MCBLASLT_CLUSTER_SHAPE_1x12x1
#define CUBLASLT_CLUSTER_SHAPE_1x13x1  MCBLASLT_CLUSTER_SHAPE_1x13x1
#define CUBLASLT_CLUSTER_SHAPE_1x14x1  MCBLASLT_CLUSTER_SHAPE_1x14x1
#define CUBLASLT_CLUSTER_SHAPE_1x15x1  MCBLASLT_CLUSTER_SHAPE_1x15x1
#define CUBLASLT_CLUSTER_SHAPE_2x3x1   MCBLASLT_CLUSTER_SHAPE_2x3x1
#define CUBLASLT_CLUSTER_SHAPE_2x5x1   MCBLASLT_CLUSTER_SHAPE_2x5x1
#define CUBLASLT_CLUSTER_SHAPE_2x6x1   MCBLASLT_CLUSTER_SHAPE_2x6x1
#define CUBLASLT_CLUSTER_SHAPE_2x7x1   MCBLASLT_CLUSTER_SHAPE_2x7x1
#define CUBLASLT_CLUSTER_SHAPE_3x1x1   MCBLASLT_CLUSTER_SHAPE_3x1x1
#define CUBLASLT_CLUSTER_SHAPE_3x2x1   MCBLASLT_CLUSTER_SHAPE_3x2x1
#define CUBLASLT_CLUSTER_SHAPE_3x3x1   MCBLASLT_CLUSTER_SHAPE_3x3x1
#define CUBLASLT_CLUSTER_SHAPE_3x4x1   MCBLASLT_CLUSTER_SHAPE_3x4x1
#define CUBLASLT_CLUSTER_SHAPE_3x5x1   MCBLASLT_CLUSTER_SHAPE_3x5x1
#define CUBLASLT_CLUSTER_SHAPE_4x3x1   MCBLASLT_CLUSTER_SHAPE_4x3x1
#define CUBLASLT_CLUSTER_SHAPE_5x1x1   MCBLASLT_CLUSTER_SHAPE_5x1x1
#define CUBLASLT_CLUSTER_SHAPE_5x2x1   MCBLASLT_CLUSTER_SHAPE_5x2x1
#define CUBLASLT_CLUSTER_SHAPE_5x3x1   MCBLASLT_CLUSTER_SHAPE_5x3x1
#define CUBLASLT_CLUSTER_SHAPE_6x1x1   MCBLASLT_CLUSTER_SHAPE_6x1x1
#define CUBLASLT_CLUSTER_SHAPE_6x2x1   MCBLASLT_CLUSTER_SHAPE_6x2x1
#define CUBLASLT_CLUSTER_SHAPE_7x1x1   MCBLASLT_CLUSTER_SHAPE_7x1x1
#define CUBLASLT_CLUSTER_SHAPE_7x2x1   MCBLASLT_CLUSTER_SHAPE_7x2x1
#define CUBLASLT_CLUSTER_SHAPE_9x1x1   MCBLASLT_CLUSTER_SHAPE_9x1x1
#define CUBLASLT_CLUSTER_SHAPE_10x1x1  MCBLASLT_CLUSTER_SHAPE_10x1x1
#define CUBLASLT_CLUSTER_SHAPE_11x1x1  MCBLASLT_CLUSTER_SHAPE_11x1x1
#define CUBLASLT_CLUSTER_SHAPE_12x1x1  MCBLASLT_CLUSTER_SHAPE_12x1x1
#define CUBLASLT_CLUSTER_SHAPE_13x1x1  MCBLASLT_CLUSTER_SHAPE_13x1x1
#define CUBLASLT_CLUSTER_SHAPE_14x1x1  MCBLASLT_CLUSTER_SHAPE_14x1x1
#define CUBLASLT_CLUSTER_SHAPE_15x1x1  MCBLASLT_CLUSTER_SHAPE_15x1x1

#define cublasLtMatmulTile_t mcblasLtMatmulTile_t
#define CUBLASLT_MATMUL_TILE_UNDEFINED MCBLASLT_MATMUL_TILE_UNDEFINED
#define CUBLASLT_MATMUL_TILE_8x8 MCBLASLT_MATMUL_TILE_8x8
#define CUBLASLT_MATMUL_TILE_8x16 MCBLASLT_MATMUL_TILE_8x16
#define CUBLASLT_MATMUL_TILE_16x8 MCBLASLT_MATMUL_TILE_16x8
#define CUBLASLT_MATMUL_TILE_8x32 MCBLASLT_MATMUL_TILE_8x32
#define CUBLASLT_MATMUL_TILE_16x16 MCBLASLT_MATMUL_TILE_16x16
#define CUBLASLT_MATMUL_TILE_32x8 MCBLASLT_MATMUL_TILE_32x8
#define CUBLASLT_MATMUL_TILE_8x64 MCBLASLT_MATMUL_TILE_8x64
#define CUBLASLT_MATMUL_TILE_16x32 MCBLASLT_MATMUL_TILE_16x32
#define CUBLASLT_MATMUL_TILE_32x16 MCBLASLT_MATMUL_TILE_32x16
#define CUBLASLT_MATMUL_TILE_64x8 MCBLASLT_MATMUL_TILE_64x8
#define CUBLASLT_MATMUL_TILE_32x32 MCBLASLT_MATMUL_TILE_32x32
#define CUBLASLT_MATMUL_TILE_32x64 MCBLASLT_MATMUL_TILE_32x64
#define CUBLASLT_MATMUL_TILE_64x32 MCBLASLT_MATMUL_TILE_64x32
#define CUBLASLT_MATMUL_TILE_32x128 MCBLASLT_MATMUL_TILE_32x128
#define CUBLASLT_MATMUL_TILE_64x64 MCBLASLT_MATMUL_TILE_64x64
#define CUBLASLT_MATMUL_TILE_128x32 MCBLASLT_MATMUL_TILE_128x32
#define CUBLASLT_MATMUL_TILE_64x128 MCBLASLT_MATMUL_TILE_64x128
#define CUBLASLT_MATMUL_TILE_128x64 MCBLASLT_MATMUL_TILE_128x64
#define CUBLASLT_MATMUL_TILE_64x256 MCBLASLT_MATMUL_TILE_64x256
#define CUBLASLT_MATMUL_TILE_128x128 MCBLASLT_MATMUL_TILE_128x128
#define CUBLASLT_MATMUL_TILE_256x64 MCBLASLT_MATMUL_TILE_256x64
#define CUBLASLT_MATMUL_TILE_64x512 MCBLASLT_MATMUL_TILE_64x512
#define CUBLASLT_MATMUL_TILE_128x256 MCBLASLT_MATMUL_TILE_128x256
#define CUBLASLT_MATMUL_TILE_256x128 MCBLASLT_MATMUL_TILE_256x128
#define CUBLASLT_MATMUL_TILE_512x64 MCBLASLT_MATMUL_TILE_512x64
#define CUBLASLT_MATMUL_TILE_64x96 MCBLASLT_MATMUL_TILE_64x96
#define CUBLASLT_MATMUL_TILE_96x64 MCBLASLT_MATMUL_TILE_96x64
#define CUBLASLT_MATMUL_TILE_96x128 MCBLASLT_MATMUL_TILE_96x128
#define CUBLASLT_MATMUL_TILE_128x160 MCBLASLT_MATMUL_TILE_128x160
#define CUBLASLT_MATMUL_TILE_160x128 MCBLASLT_MATMUL_TILE_160x128
#define CUBLASLT_MATMUL_TILE_192x128 MCBLASLT_MATMUL_TILE_192x128
#define CUBLASLT_MATMUL_TILE_128x192 MCBLASLT_MATMUL_TILE_128x192
#define CUBLASLT_MATMUL_TILE_128x96 MCBLASLT_MATMUL_TILE_128x96
#define CUBLASLT_MATMUL_TILE_END MCBLASLT_MATMUL_TILE_END

#define cublasLtMatmulStages_t mcblasLtMatmulStages_t
#define CUBLASLT_MATMUL_STAGES_UNDEFINED MCBLASLT_MATMUL_STAGES_UNDEFINED
#define CUBLASLT_MATMUL_STAGES_16x1 MCBLASLT_MATMUL_STAGES_16x1
#define CUBLASLT_MATMUL_STAGES_16x2 MCBLASLT_MATMUL_STAGES_16x2
#define CUBLASLT_MATMUL_STAGES_16x3 MCBLASLT_MATMUL_STAGES_16x3
#define CUBLASLT_MATMUL_STAGES_16x4 MCBLASLT_MATMUL_STAGES_16x4
#define CUBLASLT_MATMUL_STAGES_16x5 MCBLASLT_MATMUL_STAGES_16x5
#define CUBLASLT_MATMUL_STAGES_16x6 MCBLASLT_MATMUL_STAGES_16x6
#define CUBLASLT_MATMUL_STAGES_32x1 MCBLASLT_MATMUL_STAGES_32x1
#define CUBLASLT_MATMUL_STAGES_32x2 MCBLASLT_MATMUL_STAGES_32x2
#define CUBLASLT_MATMUL_STAGES_32x3 MCBLASLT_MATMUL_STAGES_32x3
#define CUBLASLT_MATMUL_STAGES_32x4 MCBLASLT_MATMUL_STAGES_32x4
#define CUBLASLT_MATMUL_STAGES_32x5 MCBLASLT_MATMUL_STAGES_32x5
#define CUBLASLT_MATMUL_STAGES_32x6 MCBLASLT_MATMUL_STAGES_32x6
#define CUBLASLT_MATMUL_STAGES_64x1 MCBLASLT_MATMUL_STAGES_64x1
#define CUBLASLT_MATMUL_STAGES_64x2 MCBLASLT_MATMUL_STAGES_64x2
#define CUBLASLT_MATMUL_STAGES_64x3 MCBLASLT_MATMUL_STAGES_64x3
#define CUBLASLT_MATMUL_STAGES_64x4 MCBLASLT_MATMUL_STAGES_64x4
#define CUBLASLT_MATMUL_STAGES_64x5 MCBLASLT_MATMUL_STAGES_64x5
#define CUBLASLT_MATMUL_STAGES_64x6 MCBLASLT_MATMUL_STAGES_64x6
#define CUBLASLT_MATMUL_STAGES_128x1 MCBLASLT_MATMUL_STAGES_128x1
#define CUBLASLT_MATMUL_STAGES_128x2 MCBLASLT_MATMUL_STAGES_128x2
#define CUBLASLT_MATMUL_STAGES_128x3 MCBLASLT_MATMUL_STAGES_128x3
#define CUBLASLT_MATMUL_STAGES_128x4 MCBLASLT_MATMUL_STAGES_128x4
#define CUBLASLT_MATMUL_STAGES_128x5 MCBLASLT_MATMUL_STAGES_128x5
#define CUBLASLT_MATMUL_STAGES_128x6 MCBLASLT_MATMUL_STAGES_128x6
#define CUBLASLT_MATMUL_STAGES_32x10 MCBLASLT_MATMUL_STAGES_32x10
#define CUBLASLT_MATMUL_STAGES_8x4 MCBLASLT_MATMUL_STAGES_8x4
#define CUBLASLT_MATMUL_STAGES_16x10 MCBLASLT_MATMUL_STAGES_16x10
#define CUBLASLT_MATMUL_STAGES_8x5 MCBLASLT_MATMUL_STAGES_8x5
#define CUBLASLT_MATMUL_STAGES_16x80 MCBLASLT_MATMUL_STAGES_16x80
#define CUBLASLT_MATMUL_STAGES_64x80 MCBLASLT_MATMUL_STAGES_64x80
#define CUBLASLT_MATMUL_STAGES_END MCBLASLT_MATMUL_STAGES_END

#define cublasLtPointerMode_t mcblasLtPointerMode_t
#define CUBLASLT_POINTER_MODE_HOST MCBLASLT_POINTER_MODE_HOST
#define CUBLASLT_POINTER_MODE_DEVICE MCBLASLT_POINTER_MODE_DEVICE
#define CUBLASLT_POINTER_MODE_DEVICE_VECTOR MCBLASLT_POINTER_MODE_DEVICE_VECTOR
#define CUBLASLT_POINTER_MODE_ALPHA_DEVICE_VECTOR_BETA_ZERO \
    MCBLASLT_POINTER_MODE_ALPHA_DEVICE_VECTOR_BETA_ZERO
#define CUBLASLT_POINTER_MODE_ALPHA_DEVICE_VECTOR_BETA_HOST \
    MCBLASLT_POINTER_MODE_ALPHA_DEVICE_VECTOR_BETA_HOST

#define cublasLtPointerModeMask_t mcblasLtPointerModeMask_t
#define CUBLASLT_POINTER_MODE_MASK_NO_FILTERING MCBLASLT_POINTER_MODE_MASK_NO_FILTERING
#define CUBLASLT_POINTER_MODE_MASK_HOST MCBLASLT_POINTER_MODE_MASK_HOST
#define CUBLASLT_POINTER_MODE_MASK_DEVICE MCBLASLT_POINTER_MODE_MASK_DEVICE
#define CUBLASLT_POINTER_MODE_MASK_DEVICE_VECTOR MCBLASLT_POINTER_MODE_MASK_DEVICE_VECTOR
#define CUBLASLT_POINTER_MODE_MASK_ALPHA_DEVICE_VECTOR_BETA_ZERO \
    MCBLASLT_POINTER_MODE_MASK_ALPHA_DEVICE_VECTOR_BETA_ZERO
#define CUBLASLT_POINTER_MODE_MASK_ALPHA_DEVICE_VECTOR_BETA_HOST \
    MCBLASLT_POINTER_MODE_MASK_ALPHA_DEVICE_VECTOR_BETA_HOST

#define cublasLtOrder_t mcblasLtOrder_t
#define CUBLASLT_ORDER_COL MCBLASLT_ORDER_COL
#define CUBLASLT_ORDER_ROW MCBLASLT_ORDER_ROW
#define CUBLASLT_ORDER_COL32 MCBLASLT_ORDER_COL32
#define CUBLASLT_ORDER_COL4_4R2_8C MCBLASLT_ORDER_COL4_4R2_8C
#define CUBLASLT_ORDER_COL32_2R_4R4 MCBLASLT_ORDER_COL32_2R_4R4

#define cublasLtMatrixLayoutAttribute_t mcblasLtMatrixLayoutAttribute_t
#define CUBLASLT_MATRIX_LAYOUT_TYPE MCBLASLT_MATRIX_LAYOUT_TYPE
#define CUBLASLT_MATRIX_LAYOUT_ORDER MCBLASLT_MATRIX_LAYOUT_ORDER
#define CUBLASLT_MATRIX_LAYOUT_ROWS MCBLASLT_MATRIX_LAYOUT_ROWS
#define CUBLASLT_MATRIX_LAYOUT_COLS MCBLASLT_MATRIX_LAYOUT_COLS
#define CUBLASLT_MATRIX_LAYOUT_LD MCBLASLT_MATRIX_LAYOUT_LD
#define CUBLASLT_MATRIX_LAYOUT_BATCH_COUNT MCBLASLT_MATRIX_LAYOUT_BATCH_COUNT
#define CUBLASLT_MATRIX_LAYOUT_STRIDED_BATCH_OFFSET MCBLASLT_MATRIX_LAYOUT_STRIDED_BATCH_OFFSET
#define CUBLASLT_MATRIX_LAYOUT_PLANE_OFFSET MCBLASLT_MATRIX_LAYOUT_PLANE_OFFSET

#define cublasLtMatmulDescAttributes_t mcblasLtMatmulDescAttributes_t
#define CUBLASLT_MATMUL_DESC_COMPUTE_TYPE MCBLASLT_MATMUL_DESC_COMPUTE_TYPE
#define CUBLASLT_MATMUL_DESC_SCALE_TYPE MCBLASLT_MATMUL_DESC_SCALE_TYPE
#define CUBLASLT_MATMUL_DESC_POINTER_MODE MCBLASLT_MATMUL_DESC_POINTER_MODE
#define CUBLASLT_MATMUL_DESC_TRANSA MCBLASLT_MATMUL_DESC_TRANSA
#define CUBLASLT_MATMUL_DESC_TRANSB MCBLASLT_MATMUL_DESC_TRANSB
#define CUBLASLT_MATMUL_DESC_TRANSC MCBLASLT_MATMUL_DESC_TRANSC
#define CUBLASLT_MATMUL_DESC_FILL_MODE MCBLASLT_MATMUL_DESC_FILL_MODE
#define CUBLASLT_MATMUL_DESC_EPILOGUE MCBLASLT_MATMUL_DESC_EPILOGUE
#define CUBLASLT_MATMUL_DESC_BIAS_POINTER MCBLASLT_MATMUL_DESC_BIAS_POINTER
#define CUBLASLT_MATMUL_DESC_BIAS_BATCH_STRIDE MCBLASLT_MATMUL_DESC_BIAS_BATCH_STRIDE
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_POINTER MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_POINTER
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_LD MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_LD
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_BATCH_STRIDE \
    MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_BATCH_STRIDE
#define CUBLASLT_MATMUL_DESC_ALPHA_VECTOR_BATCH_STRIDE \
    MCBLASLT_MATMUL_DESC_ALPHA_VECTOR_BATCH_STRIDE
#define CUBLASLT_MATMUL_DESC_SM_COUNT_TARGET MCBLASLT_MATMUL_DESC_SM_COUNT_TARGET
#define CUBLASLT_MATMUL_DESC_A_SCALE_POINTER MCBLASLT_MATMUL_DESC_A_SCALE_POINTER
#define CUBLASLT_MATMUL_DESC_B_SCALE_POINTER MCBLASLT_MATMUL_DESC_B_SCALE_POINTER
#define CUBLASLT_MATMUL_DESC_C_SCALE_POINTER MCBLASLT_MATMUL_DESC_C_SCALE_POINTER
#define CUBLASLT_MATMUL_DESC_D_SCALE_POINTER MCBLASLT_MATMUL_DESC_D_SCALE_POINTER
#define CUBLASLT_MATMUL_DESC_AMAX_D_POINTER MCBLASLT_MATMUL_DESC_AMAX_D_POINTER
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_SCALE_POINTER \
    MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_SCALE_POINTER
#define CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_AMAX_POINTER \
    MCBLASLT_MATMUL_DESC_EPILOGUE_AUX_AMAX_POINTER
#define CUBLASLT_MATMUL_DESC_FAST_ACCUM MCBLASLT_MATMUL_DESC_FAST_ACCUM
#define CUBLASLT_MATMUL_DESC_BIAS_DATA_TYPE MCBLASLT_MATMUL_DESC_BIAS_DATA_TYPE
#define CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_IN_COUNTERS_POINTER \
    MCBLASLT_MATMUL_DESC_ATOMIC_SYNC_IN_COUNTERS_POINTER
#define CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_OUT_COUNTERS_POINTER \
    MCBLASLT_MATMUL_DESC_ATOMIC_SYNC_OUT_COUNTERS_POINTER
#define CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_ROWS \
    MCBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_ROWS
#define CUBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_COLS \
    MCBLASLT_MATMUL_DESC_ATOMIC_SYNC_NUM_CHUNKS_D_COLS

#define cublasLtMatrixTransformDescAttributes_t mcblasLtMatrixTransformDescAttributes_t
#define CUBLASLT_MATRIX_TRANSFORM_DESC_SCALE_TYPE MCBLASLT_MATRIX_TRANSFORM_DESC_SCALE_TYPE
#define CUBLASLT_MATRIX_TRANSFORM_DESC_POINTER_MODE MCBLASLT_MATRIX_TRANSFORM_DESC_POINTER_MODE
#define CUBLASLT_MATRIX_TRANSFORM_DESC_TRANSA MCBLASLT_MATRIX_TRANSFORM_DESC_TRANSA
#define CUBLASLT_MATRIX_TRANSFORM_DESC_TRANSB MCBLASLT_MATRIX_TRANSFORM_DESC_TRANSB

#define cublasLt3mMode_t mcblasLt3mMode_t
#define CUBLASLT_3M_MODE_DISALLOWED MCBLASLT_3M_MODE_DISALLOWED
#define CUBLASLT_3M_MODE_ALLOWED MCBLASLT_3M_MODE_ALLOWED

#define cublasLtReductionScheme_t mcblasLtReductionScheme_t
#define CUBLASLT_REDUCTION_SCHEME_NONE MCBLASLT_REDUCTION_SCHEME_NONE
#define CUBLASLT_REDUCTION_SCHEME_INPLACE MCBLASLT_REDUCTION_SCHEME_INPLACE
#define CUBLASLT_REDUCTION_SCHEME_COMPUTE_TYPE MCBLASLT_REDUCTION_SCHEME_COMPUTE_TYPE
#define CUBLASLT_REDUCTION_SCHEME_OUTPUT_TYPE MCBLASLT_REDUCTION_SCHEME_OUTPUT_TYPE
#define CUBLASLT_REDUCTION_SCHEME_MASK MCBLASLT_REDUCTION_SCHEME_MASK

#define cublasLtEpilogue_t mcblasLtEpilogue_t
#define CUBLASLT_EPILOGUE_DEFAULT MCBLASLT_EPILOGUE_DEFAULT
#define CUBLASLT_EPILOGUE_RELU MCBLASLT_EPILOGUE_RELU
#define CUBLASLT_EPILOGUE_RELU_AUX MCBLASLT_EPILOGUE_RELU_AUX
#define CUBLASLT_EPILOGUE_BIAS MCBLASLT_EPILOGUE_BIAS
#define CUBLASLT_EPILOGUE_RELU_BIAS MCBLASLT_EPILOGUE_RELU_BIAS
#define CUBLASLT_EPILOGUE_RELU_AUX_BIAS MCBLASLT_EPILOGUE_RELU_AUX_BIAS
#define CUBLASLT_EPILOGUE_DRELU MCBLASLT_EPILOGUE_DRELU
#define CUBLASLT_EPILOGUE_DRELU_BGRAD MCBLASLT_EPILOGUE_DRELU_BGRAD
#define CUBLASLT_EPILOGUE_GELU MCBLASLT_EPILOGUE_GELU
#define CUBLASLT_EPILOGUE_GELU_AUX MCBLASLT_EPILOGUE_GELU_AUX
#define CUBLASLT_EPILOGUE_GELU_BIAS MCBLASLT_EPILOGUE_GELU_BIAS
#define CUBLASLT_EPILOGUE_GELU_AUX_BIAS MCBLASLT_EPILOGUE_GELU_AUX_BIAS
#define CUBLASLT_EPILOGUE_DGELU MCBLASLT_EPILOGUE_DGELU
#define CUBLASLT_EPILOGUE_DGELU_BGRAD MCBLASLT_EPILOGUE_DGELU_BGRAD
#define CUBLASLT_EPILOGUE_BGRADA MCBLASLT_EPILOGUE_BGRADA
#define CUBLASLT_EPILOGUE_BGRADB MCBLASLT_EPILOGUE_BGRADB

#define cublasLtMatmulSearch_t mcblasLtMatmulSearch_t
#define CUBLASLT_SEARCH_BEST_FIT MCBLASLT_SEARCH_BEST_FIT
#define CUBLASLT_SEARCH_LIMITED_BY_ALGO_ID MCBLASLT_SEARCH_LIMITED_BY_ALGO_ID
#define CUBLASLT_SEARCH_RESERVED_02 MCBLASLT_SEARCH_RESERVED_02
#define CUBLASLT_SEARCH_RESERVED_03 MCBLASLT_SEARCH_RESERVED_03
#define CUBLASLT_SEARCH_RESERVED_04 MCBLASLT_SEARCH_RESERVED_04
#define CUBLASLT_SEARCH_RESERVED_05 MCBLASLT_SEARCH_RESERVED_05

#define cublasLtMatmulPreferenceAttributes_t mcblasLtMatmulPreferenceAttributes_t
#define CUBLASLT_MATMUL_PREF_SEARCH_MODE MCBLASLT_MATMUL_PREF_SEARCH_MODE
#define CUBLASLT_MATMUL_PREF_MAX_WORKSPACE_BYTES MCBLASLT_MATMUL_PREF_MAX_WORKSPACE_BYTES
#define CUBLASLT_MATMUL_PREF_MATH_MODE_MASK MCBLASLT_MATMUL_PREF_MATH_MODE_MASK
#define CUBLASLT_MATMUL_PREF_REDUCTION_SCHEME_MASK MCBLASLT_MATMUL_PREF_REDUCTION_SCHEME_MASK
#define CUBLASLT_MATMUL_PREF_GAUSSIAN_MODE_MASK MCBLASLT_MATMUL_PREF_GAUSSIAN_MODE_MASK
#define CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES MCBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES
#define CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_B_BYTES MCBLASLT_MATMUL_PREF_MIN_ALIGNMENT_B_BYTES
#define CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_C_BYTES MCBLASLT_MATMUL_PREF_MIN_ALIGNMENT_C_BYTES
#define CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_D_BYTES MCBLASLT_MATMUL_PREF_MIN_ALIGNMENT_D_BYTES
#define CUBLASLT_MATMUL_PREF_MAX_WAVES_COUNT MCBLASLT_MATMUL_PREF_MAX_WAVES_COUNT
#define CUBLASLT_MATMUL_PREF_POINTER_MODE_MASK MCBLASLT_MATMUL_PREF_POINTER_MODE_MASK
#define CUBLASLT_MATMUL_PREF_EPILOGUE_MASK MCBLASLT_MATMUL_PREF_EPILOGUE_MASK
#define CUBLASLT_MATMUL_PREF_IMPL_MASK MCBLASLT_MATMUL_PREF_IMPL_MASK
#define CUBLASLT_MATMUL_PREF_SM_COUNT_TARGET MCBLASLT_MATMUL_PREF_SM_COUNT_TARGET

#define cublasLtMatmulAlgoCapAttributes_t mcblasLtMatmulAlgoCapAttributes_t
#define CUBLASLT_ALGO_CAP_SPLITK_SUPPORT MCBLASLT_ALGO_CAP_SPLITK_SUPPORT
#define CUBLASLT_ALGO_CAP_REDUCTION_SCHEME_MASK MCBLASLT_ALGO_CAP_REDUCTION_SCHEME_MASK
#define CUBLASLT_ALGO_CAP_CTA_SWIZZLING_SUPPORT MCBLASLT_ALGO_CAP_CTA_SWIZZLING_SUPPORT
#define CUBLASLT_ALGO_CAP_STRIDED_BATCH_SUPPORT MCBLASLT_ALGO_CAP_STRIDED_BATCH_SUPPORT
#define CUBLASLT_ALGO_CAP_OUT_OF_PLACE_RESULT_SUPPORT MCBLASLT_ALGO_CAP_OUT_OF_PLACE_RESULT_SUPPORT
#define CUBLASLT_ALGO_CAP_UPLO_SUPPORT MCBLASLT_ALGO_CAP_UPLO_SUPPORT
#define CUBLASLT_ALGO_CAP_TILE_IDS MCBLASLT_ALGO_CAP_TILE_IDS
#define CUBLASLT_ALGO_CAP_STAGES_IDS MCBLASLT_ALGO_CAP_STAGES_IDS
#define CUBLASLT_ALGO_CAP_CUSTOM_OPTION_MAX MCBLASLT_ALGO_CAP_CUSTOM_OPTION_MAX
#define CUBLASLT_ALGO_CAP_MATHMODE_IMPL MCBLASLT_ALGO_CAP_MATHMODE_IMPL
#define CUBLASLT_ALGO_CAP_GAUSSIAN_IMPL MCBLASLT_ALGO_CAP_GAUSSIAN_IMPL
#define CUBLASLT_ALGO_CAP_CUSTOM_MEMORY_ORDER MCBLASLT_ALGO_CAP_CUSTOM_MEMORY_ORDER
#define CUBLASLT_ALGO_CAP_POINTER_MODE_MASK MCBLASLT_ALGO_CAP_POINTER_MODE_MASK
#define CUBLASLT_ALGO_CAP_EPILOGUE_MASK MCBLASLT_ALGO_CAP_EPILOGUE_MASK
#define CUBLASLT_ALGO_CAP_LD_NEGATIVE MCBLASLT_ALGO_CAP_LD_NEGATIVE
#define CUBLASLT_ALGO_CAP_NUMERICAL_IMPL_FLAGS MCBLASLT_ALGO_CAP_NUMERICAL_IMPL_FLAGS
#define CUBLASLT_ALGO_CAP_MIN_ALIGNMENT_A_BYTES MCBLASLT_ALGO_CAP_MIN_ALIGNMENT_A_BYTES
#define CUBLASLT_ALGO_CAP_MIN_ALIGNMENT_B_BYTES MCBLASLT_ALGO_CAP_MIN_ALIGNMENT_B_BYTES
#define CUBLASLT_ALGO_CAP_MIN_ALIGNMENT_C_BYTES MCBLASLT_ALGO_CAP_MIN_ALIGNMENT_C_BYTES
#define CUBLASLT_ALGO_CAP_MIN_ALIGNMENT_D_BYTES MCBLASLT_ALGO_CAP_MIN_ALIGNMENT_D_BYTES
#define CUBLASLT_ALGO_CAP_ATOMIC_SYNC MCBLASLT_ALGO_CAP_ATOMIC_SYNC

#define cublasLtMatmulAlgoConfigAttributes_t mcblasLtMatmulAlgoConfigAttributes_t
#define CUBLASLT_ALGO_CONFIG_ID MCBLASLT_ALGO_CONFIG_ID
#define CUBLASLT_ALGO_CONFIG_TILE_ID MCBLASLT_ALGO_CONFIG_TILE_ID
#define CUBLASLT_ALGO_CONFIG_SPLITK_NUM MCBLASLT_ALGO_CONFIG_SPLITK_NUM
#define CUBLASLT_ALGO_CONFIG_REDUCTION_SCHEME MCBLASLT_ALGO_CONFIG_REDUCTION_SCHEME
#define CUBLASLT_ALGO_CONFIG_CTA_SWIZZLING MCBLASLT_ALGO_CONFIG_CTA_SWIZZLING
#define CUBLASLT_ALGO_CONFIG_CUSTOM_OPTION MCBLASLT_ALGO_CONFIG_CUSTOM_OPTION
#define CUBLASLT_ALGO_CONFIG_STAGES_ID MCBLASLT_ALGO_CONFIG_STAGES_ID

#define cublasLtMatmulInnerShape_t mcblasLtMatmulInnerShape_t
#define CUBLASLT_MATMUL_INNER_SHAPE_UNDEFINED MCBLASLT_MATMUL_INNER_SHAPE_UNDEFINED
#define CUBLASLT_MATMUL_INNER_SHAPE_MMA884 MCBLASLT_MATMUL_INNER_SHAPE_MMA884
#define CUBLASLT_MATMUL_INNER_SHAPE_MMA1684 MCBLASLT_MATMUL_INNER_SHAPE_MMA1684
#define CUBLASLT_MATMUL_INNER_SHAPE_MMA1688 MCBLASLT_MATMUL_INNER_SHAPE_MMA1688
#define CUBLASLT_MATMUL_INNER_SHAPE_MMA16816 MCBLASLT_MATMUL_INNER_SHAPE_MMA16816

// constant redefine
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_FMA MCBLASLT_NUMERICAL_IMPL_FLAGS_FMA
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_HMMA MCBLASLT_NUMERICAL_IMPL_FLAGS_HMMA
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_IMMA MCBLASLT_NUMERICAL_IMPL_FLAGS_IMMA
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_DMMA MCBLASLT_NUMERICAL_IMPL_FLAGS_DMMA
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_TENSOR_OP_MASK MCBLASLT_NUMERICAL_IMPL_FLAGS_TENSOR_OP_MASK
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_OP_TYPE_MASK MCBLASLT_NUMERICAL_IMPL_FLAGS_OP_TYPE_MASK

#define CUBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_16F MCBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_16F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_32F MCBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_32F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_64F MCBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_64F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_32I MCBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_32I
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_TYPE_MASK MCBLASLT_NUMERICAL_IMPL_FLAGS_ACCUMULATOR_TYPE_MASK

#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_16F MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_16F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_16BF MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_16BF
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_TF32 MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_TF32
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_32F MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_32F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_64F MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_64F
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_8I MCBLASLT_NUMERICAL_IMPL_FLAGS_INPUT_8I
#define CUBLASLT_NUMERICAL_IMPL_FLAGS_OP_INPUT_TYPE_MASK MCBLASLT_NUMERICAL_IMPL_FLAGS_OP_INPUT_TYPE_MASK

#define CUBLASLT_NUMERICAL_IMPL_FLAGS_GAUSSIAN MCBLASLT_NUMERICAL_IMPL_FLAGS_GAUSSIAN

// struct redefine
#define cublasLtContext mcblasLtContext
#define cublasLtHandle_t mcblasLtHandle_t
#define cublasLtMatrixLayoutOpaque_t mcblasLtMatrixLayoutOpaque_t
#define cublasLtMatrixLayout_t mcblasLtMatrixLayout_t
#define cublasLtMatmulAlgo_t mcblasLtMatmulAlgo_t
#define cublasLtMatmulDescOpaque_t mcblasLtMatmulDescOpaque_t
#define cublasLtMatmulDesc_t mcblasLtMatmulDesc_t
#define cublasLtMatrixTransformDescOpaque_t mcblasLtMatrixTransformDescOpaque_t
#define cublasLtMatrixTransformDesc_t mcblasLtMatrixTransformDesc_t
#define cublasLtMatmulPreferenceOpaque_t mcblasLtMatmulPreferenceOpaque_t
#define cublasLtMatmulPreference_t mcblasLtMatmulPreference_t
#define cublasLtMatmulHeuristicResult_t mcblasLtMatmulHeuristicResult_t

// data type redefine
#define cublasLtNumericalImplFlags_t mcblasLtNumericalImplFlags_t

// function redefine
#define cublasLtCreate mcblasLtCreate
#define cublasLtDestroy mcblasLtDestroy
#define cublasLtDisableCpuInstructionsSetMask mcblasLtDisableCpuInstructionsSetMask
#define cublasLtGetStatusName mcblasLtGetStatusName
#define cublasLtGetStatusString mcblasLtGetStatusString
#define cublasLtHeuristicsCacheGetCapacity mcblasLtHeuristicsCacheGetCapacity
#define cublasLtHeuristicsCacheSetCapacity mcblasLtHeuristicsCacheSetCapacity
#define cublasLtGetVersion mcblasLtGetVersion
#define cublasLtGetCudartVersion mcblasLtGetCudartVersion
#define cublasLtGetProperty mcblasLtGetProperty
#define cublasLtMatmul mcblasLtMatmul
#define cublasLtMatrixTransform mcblasLtMatrixTransform
#define cublasLtMatrixLayoutInit_internal mcblasLtMatrixLayoutInit_internal
#define cublasLtMatrixLayoutInit mcblasLtMatrixLayoutInit
#define cublasLtMatrixLayoutCreate mcblasLtMatrixLayoutCreate
#define cublasLtMatrixLayoutDestroy mcblasLtMatrixLayoutDestroy
#define cublasLtMatrixLayoutSetAttribute mcblasLtMatrixLayoutSetAttribute
#define cublasLtMatrixLayoutGetAttribute mcblasLtMatrixLayoutGetAttribute
#define cublasLtMatmulDescInit_internal mcblasLtMatmulDescInit_internal
#define cublasLtMatmulDescInit mcblasLtMatmulDescInit
#define cublasLtMatmulDescCreate mcblasLtMatmulDescCreate
#define cublasLtMatmulDescDestroy mcblasLtMatmulDescDestroy
#define cublasLtMatmulDescSetAttribute mcblasLtMatmulDescSetAttribute
#define cublasLtMatmulDescGetAttribute mcblasLtMatmulDescGetAttribute
#define cublasLtMatrixTransformDescInit_internal mcblasLtMatrixTransformDescInit_internal
#define cublasLtMatrixTransformDescInit mcblasLtMatrixTransformDescInit
#define cublasLtMatrixTransformDescCreate mcblasLtMatrixTransformDescCreate
#define cublasLtMatrixTransformDescDestroy mcblasLtMatrixTransformDescDestroy
#define cublasLtMatrixTransformDescSetAttribute mcblasLtMatrixTransformDescSetAttribute
#define cublasLtMatrixTransformDescGetAttribute mcblasLtMatrixTransformDescGetAttribute
#define cublasLtMatmulPreferenceInit_internal mcblasLtMatmulPreferenceInit_internal
#define cublasLtMatmulPreferenceInit mcblasLtMatmulPreferenceInit
#define cublasLtMatmulPreferenceCreate mcblasLtMatmulPreferenceCreate
#define cublasLtMatmulPreferenceDestroy mcblasLtMatmulPreferenceDestroy
#define cublasLtMatmulPreferenceSetAttribute mcblasLtMatmulPreferenceSetAttribute
#define cublasLtMatmulPreferenceGetAttribute mcblasLtMatmulPreferenceGetAttribute
#define cublasLtMatmulAlgoGetHeuristic mcblasLtMatmulAlgoGetHeuristic
#define cublasLtMatmulAlgoGetIds mcblasLtMatmulAlgoGetIds
#define cublasLtMatmulAlgoInit mcblasLtMatmulAlgoInit
#define cublasLtMatmulAlgoCheck mcblasLtMatmulAlgoCheck
#define cublasLtMatmulAlgoCapGetAttribute mcblasLtMatmulAlgoCapGetAttribute
#define cublasLtMatmulAlgoConfigSetAttribute mcblasLtMatmulAlgoConfigSetAttribute
#define cublasLtMatmulAlgoConfigGetAttribute mcblasLtMatmulAlgoConfigGetAttribute
#define cublasLtLoggerCallback_t mcblasLtLoggerCallback_t
#define cublasLtLoggerSetCallback mcblasLtLoggerSetCallback
#define cublasLtLoggerSetFile mcblasLtLoggerSetFile
#define cublasLtLoggerOpenFile mcblasLtLoggerOpenFile
#define cublasLtLoggerSetLevel mcblasLtLoggerSetLevel
#define cublasLtLoggerSetMask mcblasLtLoggerSetMask
#define cublasLtLoggerForceDisable mcblasLtLoggerForceDisable
